﻿//#include <iostream>
//
//using namespace std;
//
//class FlyBehavior
//{
//public:
//	virtual void fly() {};
//};
//
//class FreeFly : public FlyBehavior
//{
//public:
//	void fly() override {
//		std::cout << "FreeFly : Flying with style" << std::endl;
//	}
//};
//
//class Bird
//{
//protected:
//	FlyBehavior* theFlyBehavior;
//public:
//	Bird() : theFlyBehavior(NULL)
//	{ }
//	virtual void fly() {
//		if (theFlyBehavior != NULL) {
//			theFlyBehavior->fly();
//		}
//	}
//	virtual void display() = 0;
//	virtual ~Bird(){}
//	void setFlyBehavior(FlyBehavior* behavior) {
//		theFlyBehavior = behavior;
//	}
//};
//
//class Pigeon : public Bird {
//public:
//	Pigeon() {
//		setFlyBehavior(new FreeFly());
//	}
//	void display() override {
//		std::cout << "Pigeon: I'm a pigeon." << std::endl;
//	}
//};
//
//
//class Client {
//public:
//	void operate() {
//		Pigeon pigeon = Pigeon();
//		pigeon.display();
//		pigeon.fly();
//	}
//};
//
//int main() {
//	Client client;
//	client.operate();
//	return 0;
//}